import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;

/**
 * Author: Daniel Michalski
 * Date: 06.02.13
 */

@Retention(RetentionPolicy.RUNTIME)
@interface  MyAnno {
    String str();
    int value();
}

@Retention(RetentionPolicy.RUNTIME)
@interface What {
    String description();
}

@What(description = "Klasa testowa adnotacji")
@MyAnno(str = "Testowanie" , value = 100)
public class Meta2 {



    @What(description = "Metoda testowa adnotacji")
    @MyAnno(str = "Testowanie", value = 100)
    public static void myMeth() {
        Meta2 ob = new Meta2();

        Annotation[] annos = ob.getClass().getAnnotations();

        System.out.println("Wszystkie adnotacje Meta2:");

        for (Annotation a : annos)
            System.out.println(a);

        System.out.println();

        try {
            Method m = ob.getClass().getMethod("myMeth");
            annos = m.getAnnotations();

            System.out.println("Wszystkie adnotacje myMeth:");
            for(Annotation a : annos) {
                System.out.println(a);
            }
        } catch (NoSuchMethodException e) {
            System.out.println("Nie znaleziono metody myMeth");
        }
    }

    public static void main(String[] args) {
        myMeth();
    }
}
